#pragma once

#include "ConnectableElementTemplateParameter.h"

#include "ConnectableElement.h"

namespace uml {

ConnectableElementTemplateParameter::ConnectableElementTemplateParameter(const QString& umlType)
    : TemplateParameter(umlType) {}

void ConnectableElementTemplateParameter::fromJson(const QJsonObject& json, QStringList& errorList) {
    if (json.isEmpty()) {
        return;
    }

    TemplateParameter::fromJson(json, errorList);
    parameteredElement_ = JsonSerializable::create<ConnectableElement>(json.value("parameteredElement"), errorList);

}

void ConnectableElementTemplateParameter::toJson(QJsonObject& json) {
    TemplateParameter::toJson(json);
    if (parameteredElement_) {
        QJsonObject parameteredElement_json;
        parameteredElement_->toJson(parameteredElement_json);
        json.insert("parameteredElement", parameteredElement_json);
    }
}

/// <summary>
/// parameteredElement getter
/// The ConnectableElement for this ConnectableElementTemplateParameter.
/// </summary>
shared_ptr<ConnectableElement> ConnectableElementTemplateParameter::parameteredElement() const {
    return parameteredElement_;
}

/// <summary>
/// parameteredElement setter
/// The ConnectableElement for this ConnectableElementTemplateParameter.
/// </summary>
void ConnectableElementTemplateParameter::setParameteredElement(shared_ptr<ConnectableElement> value) {
    parameteredElement_ = value;
}

} // namespace uml
